/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/


dojo.provide("dojo.widget.TreeDemo");
dojo.require("dojo.Deferred");

dojo.widget.TreeDemo = {
	
	reportIfDefered: function(res) {
		if (res instanceof dojo.Deferred) {			
			res.addCallbacks(
				function(res) { /* dojo.debug("OK " + (res ? res: '')); */ return res },
				function(err) { dojo.debug("Error"); dojo.debugShallow(err); }
			);
		}		
	},
	
	resetRandomChildren: function(maxCount) {
		this.randomChildrenMaxCount = maxCount;
		this.randomChildrenCount = 0;
		this.randomChildrenDepth = 0;
	},
	
	
	makeRandomChildren: function(title) {		

		this.randomChildrenDepth++;
			
		var children = [];
		for (var i=1; i<=5; i++) {				

			var t = title+(this.randomChildrenDepth==1 ? '' : '.')+i;
			var node = {title: t};
				
			children.push(node);		
			this.randomChildrenCount++	
			if (this.randomChildrenCount >= this.randomChildrenMaxCount) {
				break;			
			}
		}

		var i=1;
		var _this = this;
		dojo.lang.forEach(children, function(child) {
			var t = title+(_this.randomChildrenDepth==1 ? '' : '.')+i;
			i++;
		
			// first node is always folder for tests
			if (_this.randomChildrenCount<_this.randomChildrenMaxCount && (
				_this.randomChildrenDepth==1 && child === children[0] || _this.randomChildrenDepth<5 && Math.random()>0.3 )
			  ) {
				//dojo.debug("add child "+t);
				child.children = _this.makeRandomChildren(t);	
			}
		});
				

			//dojo.debug("out "+nodeOrTree);
			
		this.randomChildrenDepth--;
			
		return children;			
	},
	
	bindDemoMenu: function(controller) {
		var _t = this;
		
		dojo.event.topic.subscribe('treeContextMenuDestroy/engage',
			function (menuItem) { 
				var node = menuItem.getTreeNode();
				//if (confirm("Delete node with descendants: "+node.title.replace(/(<([^>]+)>)/ig," ") +" ?")) {
				_t.reportIfDefered(controller.destroyChild(node)); 
				
			}
		);

		dojo.event.topic.subscribe('treeContextMenuRefresh/engage',
			function (menuItem) {
                var node = menuItem.getTreeNode();
                _t.reportIfDefered(controller.refreshChildren(node));
			}
		);

		dojo.event.topic.subscribe('treeContextMenuCreate/engage',
			function (menuItem) {
				var node = menuItem.getTreeNode();
				var d = controller.createAndEdit(node, 0);
				_t.reportIfDefered(d);
            }
		);


		dojo.event.topic.subscribe('treeContextMenuUp/engage',
			function (menuItem) {
                var node = menuItem.getTreeNode();
                if (node.isFirstChild()) return;
                _t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex()-1));
            }
		);


		dojo.event.topic.subscribe('treeContextMenuDown/engage',
			function (menuItem) {
                var node = menuItem.getTreeNode();
                if (node.isLastChild()) return;
                _t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex()+1));
            }
		);

		dojo.event.topic.subscribe('treeContextMenuEdit/engage',
			function (menuItem) {
                var node = menuItem.getTreeNode();
                _t.reportIfDefered(controller.editLabelStart(node));
			}
		);


	}
	
	
	
}
